import axios from "axios";
import TokenUtils from "./tokenUtils";

/**
 * 网络请求工具类
 *
 * @type {{}}
 */
const RequestUtils = {

    /**
     * 查询当前的后端路由类型
     *
     * <p> localhost: 本地网关 </p>
     * <p> server: 生产环境线上网关服务 </p>
     * @returns {string}
     */
    getCurrentBackRouteType: () => {
        if (localStorage.getItem("BACK_ROUTE") === "localhost") {
            return "localhost";
        } else {
            return "server";
        }
    },

    /**
     * 获取当前的网关地址
     * <p> 这个后端网关路由会存储到浏览器的 localStorage 中 </p>
     * <p> 如果存在后端网关路由 localhost, 那么请求会发到本机, 没有配置或者不是localhost, 请求会发送到服务器 </p>
     *
     * <p> key: BACK_ROUTE </p>
     * <p> value: localhost </p>
     */
    getCurrentGatewayAddress: () => {
        // 本地网关
        if (RequestUtils.getCurrentBackRouteType() === "localhost") {
            return "http://localhost:8060/gs/";
        } else {
            // 线上网关
            return "http://115.190.230.53:8060/gs/";
        }
    },

    /**
     * 发送 post 请求
     *
     * @param api 请求api, 必须从 RequestApis 中获取
     * @param param 请求参数
     */
    post: (api, param) => {
        const currentToken = TokenUtils.getCurrentUserToken();
        let headers = {};

        if (currentToken !== null && currentToken !== "" && currentToken !== undefined) {
            headers = {
                "Authorization": "Bearer " + currentToken
            }
        }

        return axios.post(
            RequestUtils.getCurrentGatewayAddress() + api,
            param,
            {
                headers: headers,
                timeout: 15000
            })
            .then(
                res => {
                    if (res.data.code === 200) {
                        return res;
                    } else { // 业务报错后, 将traceId和错误信息抛出
                        throw new Error(res.data.message + "； traceId：" + res.data.traceId);
                    }
                }
            ).catch(err => {
                if(err.message.indexOf("timeout") > -1){
                    err.message = "请求超时，请稍后再试";
                }
                if(err.message.indexOf("Network Error") > -1){
                    err.message = "网络异常，请稍后再试";
                }
                throw err;
            })
    }

}

export default RequestUtils;